import cac from 'cac'

import { readFileSync } from 'node:fs'


const cli = cac('vite')

let packagePath = new URL('./package.json', import.meta.url)

let { version } = JSON.parse(readFileSync(packagePath).toString())


const cleanOptions = () => {

}


// 模仿vite 提供的命令  npx vite --help

cli.command('[root]', '启动一个服务') // 默认命令
  .alias('serve') // 通过 vite api调用的命令
  .alias('dev') // 在package.json中调用的命令  vite dev
  .option('--host [host]', '[string] 指定hostname', {
    type: (v) => {
      console.log(v);
      if (typeof v === 'number') {
        return String(v)
      }

      return v
    }
  })
  .option('--port <port>', '[number] 指定端口号')
  .option('--open [path]', '[boolean | string] 打开浏览器')
  .action(async (root, options) => {
    console.log(root);

    console.log(options);

    // vite 默认命令会启动一个服务

    const { createServer } = await import('./vite/server.mjs')

    console.log(createServer);

    // 启动一个静态服务
    try {
      const server = await createServer({
        root,
        base: options.base,
        mode: options.mode,
        configFile: options.config,
        logLevel: options.logLevel,
        clearScreen: option.clearScreen,
        server: cleanOptions(options)
      })
    } catch (error) {

    }

  })

cli.command('build [root]', '生产构建')
  .option('--target <target>', `[string] 转换的目标，默认是 modules`)
  .option('--outDir <dir>', `[string] 输出目录, 默认 dist`)
  .action((root, options) => {
    console.log(root);
    console.log(options);
  })

cli.help()

cli.version(version)

cli.parse()